

package com.hazelcast.map.impl.query;

import com.hazelcast.aggregation.Aggregator;
import com.hazelcast.internal.util.collection.PartitionIdSet;
import com.hazelcast.query.impl.QueryableEntry;

/**
 * Executes the accumulation phase of the Aggregator.
 * <p>
 * All entries are accumulates by the result aggregator returned in the AggregationResult.
 */
public interface AccumulationExecutor {

    /**
     * @param aggregator   Instance of aggregator using which the entries should be accumulated (it will not be modified)
     * @param entries      Entries to be accumulated
     * @param partitionIds IDs of the partitions where the entries reside
     * @return AggregationResult encompassing the result aggregator
     */
    AggregationResult execute(Aggregator aggregator, Iterable<QueryableEntry> entries, PartitionIdSet partitionIds);
}
